home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amoszine 10
/
Amoszine 10 (Disk 3 of 3).adf
/
menusys.lha
/
SOURCE_MSYSA.AMOS
/
SOURCE_MSYSA.amosSourceCode
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
NeXTSTEP
RISC OS
UTF-8
Wrap
AMOS Source Code
|
1993-07-24
|
32.2 KB
|
1,364 lines
FIL$=Command Line$
Request Wb
Screen Open 1,640,256,8,Hires
Paper 0 : Cls : Flash Off : Curs Off
Palette 0,0,0,0,0,0,0,0
Break Off
Limit Mouse 0,0 To 640,300
Screen Display 1,,40,,
Dim MNU$(90,2),MNI(90,4),ARRS(10,4),RMOD$(8),WINCON(4),PAL(8)
Global MNU$(),MNI(),ARRS(),RMOD$(),ERR,WINCON(),SFNT,_MODE,FIL$,VER$,_INDEX
Global _RX,_ORX,_GX,_OGX,_BX,_OBX,PAL(),_SYS$
VER$="5.00A"
_INDEX=0
_SYS$="SYS:"
_WIN
_SEARCH["Peridot.Font"]
SFNT=Param
Set Font SFNT
Gr Writing 0
_RUNMODES
If FIL$<>""
_LOAD[FIL$]
If Param=False
Amos To Front
_CREDITS
End If
Else
Amos To Front
_CREDITS
End If
_NL=20
_MODE=1
_PREFSET
_EDITSCRN
_SETDIS[_NL]
_SCANMATRIX[_NL]
Procedure _SETDIS[BDOWN]
Screen 1
_BOX[0,240,430,9,False,2,4,3,1,"** MENU SYSTEM V"+VER$+" ** ",%11]
_BOX[435,240,45,9,False,2,4,3,1,"SAVE",%11]
_BOX[485,240,45,9,False,2,4,3,1,"PREF",%11]
_BOX[535,240,45,9,False,2,4,3,1,"EXEC",%11]
_BOX[585,240,45,9,False,2,4,3,1,"QUIT",%11]
If Amos Here=False
Amos To Front
End If
For _ROW=1 To BDOWN
_REDO_ROW[_ROW-1]
Next
Fade 3,PAL(0),PAL(1),PAL(2),PAL(3),PAL(4),PAL(5),PAL(6),PAL(7)
Wait 3*15
End Proc
Procedure _BOX[X,Y,W,H,INV,CINS,CHIG,CLOW,CTEX,TEX$,TTYP]
If CINS<>-1
Ink CINS
Bar X,Y To X+W,Y+H
End If
If INV=False Then Ink CLOW Else Ink CHIG
Box X,Y To X+W,Y+H
If INV=False Then Ink CHIG Else Ink CLOW
Draw X,Y To X+W,Y
Draw X,Y To X,Y+H
If TEX$<>""
If Btst(0,TTYP)=True
TX=Text Length(TEX$)
TX=X+((W-TX)/2)
Else
TX=X+6
End If
If Btst(1,TTYP)=True
Ink 0
Text TX+1,Y+8,TEX$
End If
Ink CTEX
Text TX,Y+7,TEX$
End If
End Proc
Procedure _SCANMATRIX[SZ]
Screen 1
_BXWD=157
_BXHI=11
_BXXS=2
_BXYS=14
_MXY=_BXYS+(SZ*_BXHI)
_MXX=_BXXS+(4*_BXWD)
_PARRAY[5,0,0,0,0,0]
_PARRAY[1,1,485,240,45,9] : Rem PREF
_PARRAY[1,2,535,240,45,9] : Rem EDIT
_PARRAY[1,3,435,240,45,9] : Rem SAVE
_PARRAY[1,4,585,240,45,9] : Rem QUIT
_PARRAY[0,5,0,0,0,0]
_PARRAY[0,6,0,0,0,0]
_PARRAY[0,7,0,0,0,0]
_PARRAY[0,8,0,0,0,0]
_PARRAY[0,9,0,0,0,0]
_PARRAY[0,10,0,0,0,0]
Repeat
Repeat
MCOND=Mouse Key
If MCOND>0
BT=-1
MX=X Screen(X Mouse)
MY=Y Screen(Y Mouse)
If MX>_BXXS and MX<_MXX
X=MX-_BXXS
If MY>_BXYS and MY<_MXY
Y=MY-_BXYS
_ROW=Int(Y/_BXHI)
_COL=Int(X/_BXWD)
BT=(_ROW*4)+_COL
Rem If The Area Activated Is Part Of Another Button Then The Locates
Rem The Start Position Of The Button And Sets The Position Vector
Rem To Point To The Start
If MNI(BT,2)=-1
_PCOL=_COL
FOUND=False
Repeat
Dec _PCOL
If MNI((_ROW*4)+_PCOL,2)>-1
FOUND=True
End If
Until _PCOL=0 or FOUND=True
_COL=_PCOL
BT=(_ROW*4)+_COL
End If
Rem Invert The Button If TYPE [MNI(BT,1)] Is Less Than 3
If MNI(BT,1)<4
_INVERT_BUTTON[_ROW,_COL,BT]
End If
Rem This Controls The Editing Of Buttons
If _MODE=2
Wait 10 : _EDITCHK[BT]
Screen 1
If Param=True
_REDO_ROW[_ROW]
End If
_PARRAY[5,0,0,0,0,0]
_PARRAY[1,1,485,240,45,9] : Rem PREF
_PARRAY[1,2,535,240,45,9] : Rem EDIT
_PARRAY[1,3,435,240,45,9] : Rem SAVE
_PARRAY[1,4,585,240,45,9] : Rem QUIT
_PARRAY[0,5,0,0,0,0]
_PARRAY[0,6,0,0,0,0]
_PARRAY[0,7,0,0,0,0]
_PARRAY[0,8,0,0,0,0]
_PARRAY[0,9,0,0,0,0]
_PARRAY[0,10,0,0,0,0]
End If
End If
End If
If BT=-1
If MY>240 and MY<249
_EDITING_CONTROL[MX,MY]
End If
End If
If MCOND=1 and BT>-1 and _MODE=1
If MNU$(BT,2)<>""
If MNI(BT,1)<3
_EXECUTE[BT]
Else
If MNI(BT,1)=3
If Exist(MNU$(BT,2))=True
Fade 3,0,0,0,0,0,0,0,0
Wait 3*15
_LOAD[MNU$(BT,2)]
_SETDIS[20]
End If
End If
End If
End If
End If
End If
Until BT>0
Until False
End Proc
Procedure _EDITSCRN
Screen Open 2,640,150,8,Hires
Paper 0 : Cls : Flash Off : Curs Off
Screen To Front 2
Screen Hide 2
Palette $0,$DDD,$666,$222,$AAA,$444,$111,$666
Screen Display 2,,130,,98
Set Font SFNT
Gr Writing 0
Restore _EDDAT
For PIECE=1 To 32
Read X,Y,W,H,INV,CINS,CHIG,CLOW,CTEX,TEX$,TTYP
_BOX[X,Y,W,H,INV,CINS,CHIG,CLOW,CTEX,TEX$,TTYP]
Next
_EDDAT:
Data 0,0,630,9,False,2,4,3,1,"MENU ITEM EDITOR - MENU SYSTEM VERSION "+VER$,%11
Data 2,15,626,40,False,5,7,6,1,"ITEM"+Space$(10)+"TYPE"+Space$(17)+"SIZE"+Space$(10)+"COLOUR",%10
Data 45,17,30,9,True,0,7,6,1,"",%11
Data 153,16,94,11,True,5,7,6,1,"",0
Data 155,17,90,9,False,2,4,3,1,"",%11
Data 298,16,44,11,True,5,7,6,1,"",0
Data 300,17,40,9,False,2,4,3,1,"",%11
Data 10,34,354,11,True,5,7,6,1,"",0
Data 12,35,100,9,False,2,4,3,1,"FILENAME",%11
Data 118,35,240,9,True,0,7,6,1,"",%11
Data 370,34,240,11,True,5,7,6,1,"",0
Data 372,35,20,9,False,2,4,3,1,"X",%11
Data 398,35,206,9,True,0,7,6,1,"",%11
Data 2,57,626,40,False,5,7,6,1,"BUTTON PLACED IN MENU"+Space$(5)+"SEND COMMAND TO"+Space$(18)+"MENU",%10
Data 338,58,94,11,True,5,7,6,1,"",0
Data 340,59,90,9,False,2,4,3,1,"",%11
Data 498,58,94,11,True,5,7,6,1,"",0
Data 500,59,90,9,False,2,4,3,1,"",%11
Data 418,16,44,11,True,0,7,6,1,"",0
Data 420,17,40,9,False,2,4,3,1,"",%11
Data 488,16,64,11,True,0,7,6,1,"",0
Data 490,17,60,9,False,2,4,3,1,"DEF",%11
Data 558,16,64,11,True,0,7,6,1,"",0
Data 560,17,60,9,False,2,4,3,1,"EXIT",%11
Data 2,99,626,30,False,5,7,6,1,"TEXT ENTRY",%11
Data 27,111,512,11,True,5,7,6,1,"",%11
Data 29,112,50,9,False,2,4,3,1,"TEXT",%11
Data 85,112,448,9,True,3,7,6,1,"",%11
Data 548,111,54,11,True,5,7,6,1,"",0
Data 550,112,50,9,False,2,4,3,1,"DIR",%11
Data 4,100,20,11,True,5,7,6,1,"",0
Data 6,101,18,9,False,2,4,3,1,"Q",%11
End Proc
Procedure _SCAN[X,Y]
_FOUND=False
_FPOINT=0
_POINT=1
_NA=ARRS(0,0)
Repeat
If ARRS(_POINT,0)=1
If X>ARRS(_POINT,1)
If Y>ARRS(_POINT,2)
If X<(ARRS(_POINT,1)+ARRS(_POINT,3))
If Y<(ARRS(_POINT,2)+ARRS(_POINT,4))
_FOUND=True
_FPOINT=_POINT
End If
End If
End If
End If
End If
If _FOUND=False
Inc _POINT
End If
Until _POINT=_NA or _FOUND=True
End Proc[_FPOINT]
Procedure _PARRAY[O,ZNID,X,Y,W,H]
ARRS(ZNID,0)=O
ARRS(ZNID,1)=X
ARRS(ZNID,2)=Y
ARRS(ZNID,3)=W
ARRS(ZNID,4)=H
End Proc
Procedure _EDITCHK[BUT]
Screen 2
_BOX[45,17,30,9,True,0,7,6,1,Mid$(Str$(BUT),2),%11]
_BOX[118,35,240,9,True,0,7,6,1,Mid$(Upper$(MNU$(BUT,2)),1,29),%11]
_BOX[398,35,206,9,True,0,7,6,1,Mid$(Upper$(MNU$(BUT,0)),1,25),%11]
_BOX[300,17,40,9,False,2,4,3,1,Mid$(Str$(MNI(BUT,2)+1),2),%11]
If MNI(BUT,1)<5
_BOX[420,17,40,9,False,2,4,3,1,Mid$(Str$(MNI(BUT,4)+1),2),%11]
_PARRAY[1,5,420,17,40,9] : Rem COLOUR
Else
_BOX[420,17,40,9,True,2,4,3,1,Mid$(Str$(MNI(BUT,4)+1),2),%11]
_PARRAY[0,5,0,0,0,0] : Rem COLOUR
End If
If MNI(BUT,0)=0 Then _Q$="CLI" Else _Q$="MENU"
_BOX[340,59,90,9,False,2,4,3,1,_Q$,%11]
If MNI(BUT,3)=0 Then _Q$="REMAINS" Else _Q$="SHRINKS"
_BOX[500,59,90,9,MNI(BUT,0)-1,2,4,3,1,_Q$,%11]
_PLACE_BUTTON[BUT,MNI(BUT,2)+1,True]
RTYPE=MNI(BUT,1)
_BOX[155,17,90,9,False,2,4,3,1,Upper$(RMOD$(RTYPE)),%11]
_PARRAY[11,0,0,0,0,0]
_PARRAY[1,1,12,35,100,9] : Rem FILENAME
_PARRAY[1,3,155,17,90,9] : Rem RUN/EXECUTE Etc
_PARRAY[1,4,560,17,60,9] : Rem EXIT
_PARRAY[1,6,490,17,60,9] : Rem DEFAULT
_PARRAY[1,7,300,17,40,9] : Rem SIZE of button
_PARRAY[1,8,372,35,20,9] : Rem X-tend Filename
_PARRAY[1,9,340,59,90,9] : Rem CLI/MENU
If MNI(BUT,0)=1
_PARRAY[1,10,500,59,90,9] : Rem MULTI/NOMULTI tasking - NB Only when Button 9 = MENU !!
Else
_PARRAY[0,10,0,0,0,0]
End If
Screen Show 2
FLAT=False
Repeat
_MMODE=Mouse Key
If _MMODE>0
MY=Y Screen(Y Mouse)
MX=X Screen(X Mouse)
If MY>0 and MY<9
_SCRNMOV[MY,2,98,170]
Else
_SCAN[MX,MY]
ZN=Param
If ZN>0
_INVERTSEL[ZN]
If ZN=1
_FILEHANDLER[BUT,2]
_BOX[118,35,240,9,True,0,7,6,1,Mid$(Upper$(MNU$(BUT,2)),1,29),%11]
End If
If ZN=2
MP=630
MZ=(MNI(BUT,2)+1)*152
SP=Int((MP-MZ)/2)
_TEXENT[SP,75,MZ,9,2,1,BUT,1,MZ-10,%11]
FLAT=True
End If
If ZN=3
If RTYPE=5
_BOX[420,17,40,9,False,True,4,3,1,"",%11]
_PARRAY[1,5,420,17,40,9] : Rem COLOUR
End If
If _MMODE=1
RTYPE=(RTYPE+1) mod 6
Else
If _MMODE=2
RTYPE=RTYPE-1
If RTYPE<0
RTYPE=5
End If
End If
End If
MNI(BUT,1)=RTYPE
FLAT=True
_BOX[155,17,90,9,False,2,4,3,1,Upper$(RMOD$(RTYPE)),%11]
If RTYPE=5
_BOX[420,17,40,9,True,True,4,3,1,"",%11]
_PARRAY[0,5,0,0,0,0] : Rem COLOUR
End If
End If
If ZN=5
MNI(BUT,4)=MNI(BUT,4)+1
If MNI(BUT,4)>1
MNI(BUT,4)=0
End If
_BOX[420,17,40,9,False,2,4,3,1,Mid$(Str$(MNI(BUT,4)+1),2),%11]
FLAT=True
End If
If ZN=6
For I=0 To MNI(BUT,2)
MNU$(BUT+I,0)=""
MNU$(BUT+I,1)=""
MNU$(BUT+I,2)=""
MNI(BUT+I,0)=0
MNI(BUT+I,1)=0
MNI(BUT+I,2)=0
MNI(BUT+I,3)=0
MNI(BUT+I,4)=0
Next
FLAT=True
RTYPE=0
_BOX[300,17,40,9,False,2,4,3,1,"1",%11]
_BOX[118,35,240,9,True,0,7,6,1,"",%11]
_BOX[398,35,206,9,True,0,7,6,1,"",%11]
_BOX[340,59,90,9,False,2,4,3,1,"CLI",%11]
_BOX[500,59,90,9,True,2,4,3,1,"REMAINS",%11]
_BOX[420,17,40,9,False,2,4,3,1,"1",%11]
_PLACE_BUTTON[BUT,1,True]
_PARRAY[0,10,0,0,0,0]
_PARRAY[1,5,420,17,40,9] : Rem COLOUR
_BOX[155,17,90,9,False,2,4,3,1,Upper$(RMOD$(0)),%11]
End If
If ZN=7 and _MMODE=1
_COL=BUT mod 4
M=MNI(BUT,2)
If M>0
_MAKE_AVAIL[BUT,_COL,M]
End If
Inc M
If M>(3-_COL)
M=0
Else
_CHECK_AVAIL[BUT,_COL,M]
If Param=True
M=0
End If
End If
MNI(BUT,2)=M
MNU$(BUT,1)=""
_BOX[300,17,40,9,False,2,4,3,1,Mid$(Str$(MNI(BUT,2)+1),2),%11]
_PLACE_BUTTON[BUT,MNI(BUT,2)+1,True]
FLAT=True
End If
If ZN=8
_FILEHANDLER[BUT,0]
_BOX[398,35,206,9,True,0,7,6,1,Mid$(Upper$(MNU$(BUT,0)),1,25),%11]
End If
If ZN=9
If MNI(BUT,0)=0
MNI(BUT,0)=1
_Q$="MENU"
_PARRAY[1,10,500,59,90,9]
Else
MNI(BUT,0)=0
_Q$="CLI"
_PARRAY[0,10,0,0,0,0]
End If
_BOX[340,59,90,9,False,2,4,3,1,_Q$,%11]
If MNI(BUT,3)=0
_Q$="REMAINS"
Else
_Q$="SHRINKS"
End If
_BOX[500,59,90,9,MNI(BUT,0)-1,2,4,3,1,_Q$,%11]
End If
If ZN=10
If MNI(BUT,3)=0
MNI(BUT,3)=1
_Q$="SHRINKS"
Else
MNI(BUT,3)=0
_Q$="REMAINS"
End If
_BOX[500,59,90,9,False,2,4,3,1,_Q$,%11]
End If
End If
End If
End If
Until ZN=4
Screen Hide 2
End Proc[FLAT]
Procedure _TEXENT[X,Y,W,H,CINS,CTEX,BT,EL,MXLEN,TTYP]
Clear Key
CH$=" ABCDEGFGHIJKLMNOPQRSTUVWXYZ0123456789-',.<>/?;:#@[{]}|\+=-_)(*&^%$�!~"
TEX$=MNU$(BT,EL)
Repeat
C$=Upper$(Inkey$)
RETYP=False
CP=Instr(CH$,C$)
If CP>0
TX=Text Length(TEX$)
If(TX+10)<MXLEN
TEX$=TEX$+C$
RETYP=True
TX=Text Length(TEX$)
End If
Else
S=Key Shift
If S=1 or S=2
If Key State(65)
TEX$=""
RETYP=True
TX=Text Length(TEX$)
End If
Else
If Key State(65)
If Len(TEX$)>0
TEX$=Mid$(TEX$,1,Len(TEX$)-1)
RETYP=True
TX=Text Length(TEX$)
Wait 5
End If
End If
End If
End If
If RETYP=True
Ink CINS
Bar X+1,Y+1 To X+W-1,Y+H-1
If TEX$<>""
If Btst(0,TTYP)=True
TX=X+((W-TX)/2)
Else
TX=X+6
End If
If Btst(1,TTYP)=True
Ink 0
Text TX+1,Y+8,TEX$
End If
Ink CTEX
Text TX,Y+7,TEX$
End If
End If
Until C$=Chr$(13)
MNU$(BT,EL)=TEX$
End Proc
Procedure _RUNMODES
Restore RMODS
For I=0 To 5
Read RMOD$(I)
Next
For I=0 To 7
Read PAL(I)
Next
RMODS:
Data "Run","Execute","Direct","Menu","Text","Blank"
Data $0,$DDF,$668,$224,$AAC,$446,$113,$668
End Proc
Procedure _CREDITS
Screen Open 3,640,256,8,Hires
Paper 0 : Cls : Flash Off : Curs Off
Palette 0,0,0,0,0,0,0,0
Screen Display 3,,40,,
Screen To Back 3
Gr Writing 0
Set Font SFNT
_BOX[0,10,630,9,False,2,4,3,1,"CREDITS",%11]
_BOX[2,25,626,224,False,5,7,6,1,"",0]
Restore CREDDAT
X=2
Y=30
Repeat
Read A$
If Len(A$)>MX Then MX=Len(A$)
If A$<>"XXX"
TX=Text Length(A$)
TX=X+((626-TX)/2)
Ink 0 : Text TX+1,Y+8,A$
Ink 1 : Text TX,Y+7,A$
Add Y,8
End If
Until A$="XXX"
Screen To Front 3
Fade 3,$0,$DDF,$668,$224,$AAC,$446,$113,$668
Wait 3*15
Repeat
Until Mouse Key=1
Fade 3,0,0,0,0,0,0,0,0
Wait 3*30
Screen Close 3
Screen 1
CREDDAT:
Data "** MENU SYSTEM VERSION "+VER$+" **"
Data "BY"
Data "SAMUEL COLAK"
Data ""
Data "RELEASE DATE: 17TH JUNE 1993"
Data "OH BY THE WAY... THIS PROGRAM WAS WRITTEN AND COMPILED USING AMOS!!!"
Data "COMPATIBLE WITH ALL VERSIONS OF AMIGA !!"
Data ""
Data "THIS IS THE LATEST UPDATE OF MENU SYSTEM!!"
Data ""
Data "DISTRIBUTED BY AMIGA FORMAT !!"
Data ""
Data "THE FOLLOWING PEOPLE HAVE HELPED IN THE MAKING OF THIS PROGRAM"
Data ""
Data "BOB BRIGGS - BETA TESTING AND IDEAS"
Data "MATTHEW COLAK - DOCUMENTATION AND BETA TESTING"
Data "GILES MIDDLETON - BETA TESTING"
Data ""
Data "THIS PROGRAM IS PUBLIC DOMAIN.. THAT MEANS THAT A FEE CAN ONLY BE"
Data "CHARGED FOR THE DISK AND COPYING.."
Data ""
Data "SEE README.DOC FOR MORE INFORMATION"
Data ""
Data ""
Data "PRESS LEFT MOUSE BUTTON TO CONTINUE"
Data "XXX"
End Proc
Procedure _WINDOPEN[N,X,Y,XX,YY,NAME$,CL]
X$=Str$(X)-" "
Y$=Str$(Y)-" "
XX$=Str$(XX)-" "
YY$=Str$(YY)-" "
CON$="CON:"+X$+"/"+Y$+"/"+XX$+"/"+YY$+"/"+NAME$
If CL=1
CON$=CON$+"/CLOSE"
End If
CON$=CON$+Chr$(0)
Dreg(1)=Varptr(CON$)
Dreg(2)=1005
WINCON(N)=Doscall(-30)
If WINCON(N)=0
ERR=Doscall(-132)
End If
End Proc
Procedure _WINDEXECUTE[N,COM$]
If WINCON(N)=0 Then Goto ERR
COM$=COM$+Chr$(0)
Dreg(1)=Varptr(COM$)
Dreg(2)=0
Dreg(3)=WINCON(N)
X=Doscall(-222)
If X=0
Goto ERR
End If
Pop Proc
ERR:
ERR=Doscall(-132)
End Proc
Procedure _WINDCLOSE[N]
If WINCON(N)=0 Then Goto ERR
Dreg(1)=WINCON(N)
X=Doscall(-36)
If X=0
Goto ERR
End If
Pop Proc
ERR:
ERR=Doscall(-132)
End Proc
Procedure _WIN
If Exist("SYS:Fonts/Peridot.Font")=True
_WINDOPEN[1,400,0,240,10,"Menu System V"+VER$+"",0]
Else
Screen Close 1
End
End If
End Proc
Procedure _SEARCH[_FNT$]
Get Disc Fonts
N=1
_FNT$=Upper$(_FNT$)
Repeat
F$=Mid$(Upper$(Font$(N)),1,Len(_FNT$))
If F$<>_FNT$
Inc N
End If
Until F$=_FNT$
End Proc[N]
Procedure _PLACE_BUTTON[BUT,SZ,RED]
MP=630
MZ=SZ*152
MZ2=(4*152)+4
SP=(MP-MZ)/2
SP2=(MP-MZ2)/2
If RED=True
Ink 5
Bar SP2,74 To SP2+MZ2,85
_BOX[SP-2,74,MZ+4,11,True,5,7,6,1,"",0]
_BOX[SP,75,MZ,9,False,2,4,3,1,MNU$(BUT,1),%11]
End If
_PARRAY[1,2,SP,75,MZ,9] : Rem BOX TEXT
If SZ>1
For PBUT=1 To SZ-1
MNI(BUT+PBUT,2)=-1
Next
End If
End Proc
Procedure _INVERT_BUTTON[_ROW,_COL,BUT]
SZ=153+(MNI(BUT,2)*157)
If MNI(BUT,4)=0
CHIGH=7 : CLOW=6
Else
CHIGH=4 : CLOW=3
End If
_BOX[2+(_COL*157),14+(_ROW*11),SZ,9,True,True,CHIGH,CLOW,1,"",0]
Repeat
Until Mouse Key=0
_BOX[2+(_COL*157),14+(_ROW*11),SZ,9,False,True,CHIGH,CLOW,1,"",0]
End Proc
Procedure _GENERATE_BUTTON[_ROW,_COL,BUT,TYPE]
SZ=153+(MNI(BUT,2)*157)
If MNI(BUT,1)<5
If TYPE=0
_BOX[2+(_COL*157),14+(_ROW*11),SZ,9,False,5,7,6,1,MNU$(BUT,1),%11]
End If
If TYPE=1
_BOX[2+(_COL*157),14+(_ROW*11),SZ,9,False,2,4,3,1,MNU$(BUT,1),%11]
End If
Else
Ink 0
Bar 2+(_COL*157),14+(_ROW*11) To 2+(_COL*157)+SZ,23+(_ROW*11)
If MNU$(BUT,1)>""
_BOX[2+(_COL*157),14+(_ROW*11),SZ,9,False,True,0,0,1,MNU$(BUT,1),%11]
End If
End If
End Proc
Procedure _EDITING_CONTROL[MX,MY]
_SCAN[MX,MY]
ZN=Param
If ZN>0
_INVERTSEL[ZN]
If ZN=1
_PREFCON
Screen 1
_PARRAY[5,0,0,0,0,0]
_PARRAY[1,1,485,240,45,9] : Rem PREF
_PARRAY[1,2,535,240,45,9] : Rem EDIT
_PARRAY[1,3,435,240,45,9] : Rem SAVE
_PARRAY[1,4,585,240,45,9] : Rem QUIT
_PARRAY[0,5,0,0,0,0]
_PARRAY[0,6,0,0,0,0]
_PARRAY[0,7,0,0,0,0]
_PARRAY[0,8,0,0,0,0]
_PARRAY[0,9,0,0,0,0]
_PARRAY[0,10,0,0,0,0]
End If
If ZN=2
If _MODE=1
_MODE=2
_BOX[535,240,45,9,False,2,4,3,1,"EDIT",%11]
Else
_MODE=1
_BOX[535,240,45,9,False,2,4,3,1,"EXEC",%11]
End If
End If
If ZN=3
_SAVE
End If
If ZN=4
Fade 2,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF
Wait 2*30
Fade 3,0,0,0,0,0,0,0,0
Wait 3*30
Amos To Back
Wait 20
_WINDCLOSE[1]
Screen Close 1
Screen Close 2
Screen Close 3
End
End If
End If
End Proc
Procedure _EXECUTE[BUT]
If MNI(BUT,0)=0
Fade 2,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF
Wait 2*30
Fade 3,0,0,0,0,0,0,0,0
Wait 3*30
Amos To Back
End If
FL$=MNU$(BUT,2)
MEM_PRES=Chip Free+Fast Free
If Exist(FL$)=True
If MNI(BUT,1)=0
_WINDEXECUTE[1,_SYS$+"C/Run <Nil: >Nil: "+FL$+" "+MNU$(BUT,0)]
Else
If MNI(BUT,1)=1
_WINDEXECUTE[1,_SYS$+"C/Execute "+FL$+" "+MNU$(BUT,0)]
Else
If MNI(BUT,1)=2
_WINDEXECUTE[1,FL$+" "+MNU$(BUT,0)]
End If
End If
End If
End If
If MNI(BUT,0)=0
Wait 20
_WINDCLOSE[1]
Screen Close 1
Screen Close 2
Screen Close 3
End
Else
If MNI(BUT,3)=1
Repeat
MEM_NOW=Chip Free+Fast Free
Multi Wait
Until MEM_NOW<MEM_PRES
_WINDCLOSE[1]
_WINDOPEN[1,300,0,340,10,"LEFT AMIGA + A - Return To Menu",0]
Fade 3,0,0,0,0,0,0,0,0
Wait 3*30
Amos To Back
Repeat
Multi Wait
_FL=Amos Here
Until _FL=True
Amos To Front
Fade 3,PAL(0),PAL(1),PAL(2),PAL(3),PAL(4),PAL(5),PAL(6),PAL(7)
Wait 3*30
_WINDCLOSE[1]
_WINDOPEN[1,400,0,240,10,"Menu System V"+VER$+"",0]
End If
End If
End Proc
Procedure _CHECK_AVAIL[BUT,_COL,SZ]
_POINT=1
NAVAIL=False
CANT=False
Repeat
If MNI(BUT+_POINT,2)<>0
NAVAIL=True
CANT=True
Else
Inc _POINT
End If
Until _POINT=SZ+1 or NAVAIL=True
End Proc[CANT]
Procedure _MAKE_AVAIL[BUT,_COL,SZ]
For _POINT=1 To SZ
MNI(BUT+_POINT,2)=0
Next
End Proc
Procedure _REDO_ROW[_ROW]
_COL=0
Ink 0
Bar 2,14+(_ROW*11) To 626,23+(_ROW*11)
BN=_ROW*4
Repeat
BUT=BN+_COL
If MNI(BUT,2)>-1
_GENERATE_BUTTON[_ROW,_COL,BUT,MNI(BUT,4)]
End If
Inc _COL
Until _COL=4
End Proc
Procedure _FILEHANDLER[BUT,EL]
TX$=MNU$(BUT,EL)
_BOX[85,112,448,9,True,0,7,6,1,TX$,%11]
For PS=98 To 130 Step 2
Screen Display 2,,,,PS
Wait Vbl
Next
_PARRAY[4,0,0,0,0,0]
_PARRAY[1,1,550,112,50,9] : Rem DIRectory
_PARRAY[1,2,29,112,50,9] : Rem FILER
_PARRAY[1,3,6,101,18,9] : Rem EXIT
_PARRAY[0,4,0,0,0,0]
_PARRAY[0,5,0,0,0,0]
_PARRAY[0,6,0,0,0,0]
_PARRAY[0,7,0,0,0,0]
_PARRAY[0,8,0,0,0,0]
_PARRAY[0,9,0,0,0,0]
_PARRAY[0,10,0,0,0,0]
Repeat
_MMODE=Mouse Key
If _MMODE>0
MY=Y Screen(Y Mouse)
MX=X Screen(X Mouse)
If MY>0 and MY<9
_SCRNMOV[MY,2,130,170]
Else
_SCAN[MX,MY]
ZN=Param
If ZN>0
_INVERTSEL[ZN]
If ZN=1
FIL$=Fsel$("","","Select File To Respond","")
If FIL$<>""
If MNU$(BUT,EL)=""
MNU$(BUT,EL)=MNU$(BUT,EL)+FIL$
Else
MNU$(BUT,EL)=MNU$(BUT,EL)+" "+FIL$
End If
_BOX[85,112,448,9,True,0,7,6,1,Upper$(MNU$(BUT,EL)),%11]
End If
End If
If ZN=2
_TEXENT[85,112,448,9,0,1,BUT,EL,448-10,%11]
End If
End If
End If
End If
Until ZN=3
For PS=130 To 98 Step -2
Screen Display 2,,,,PS
Wait Vbl
Next
_PARRAY[11,0,0,0,0,0]
_PARRAY[1,1,12,35,100,9] : Rem FILENAME
_PLACE_BUTTON[BUT,MNI(BUT,2)+1,False]
_PARRAY[1,3,155,17,90,9] : Rem RUN/EXECUTE Etc
_PARRAY[1,4,560,17,60,9] : Rem EXIT
If MNI(BUT,1)<5
_PARRAY[1,5,420,17,40,9] : Rem COLOUR
Else
_PARRAY[0,5,0,0,0,0] : Rem COLOUR
End If
_PARRAY[1,6,490,17,60,9] : Rem DEFAULT
_PARRAY[1,7,300,17,40,9] : Rem SIZE of button
_PARRAY[1,8,372,35,20,9] : Rem X-tend Filename
_PARRAY[1,9,340,59,90,9] : Rem CLI/MENU
_PARRAY[1,10,500,59,90,9]
End Proc
Procedure _PREFSET
Screen Open 3,640,80,8,Hires
Paper 0 : Cls : Flash Off : Curs Off
Screen To Front 3
Screen Hide 3
Palette $0,$DDD,$666,$222,$AAA,$444,$111,$666
Screen Display 3,,130,,78
Set Font SFNT
Gr Writing 0
Restore _PREFDAT
For PIECE=1 To 22
Read X,Y,W,H,INV,CINS,CHIG,CLOW,CTEX,TEX$,TTYP
_BOX[X,Y,W,H,INV,CINS,CHIG,CLOW,CTEX,TEX$,TTYP]
Next
Ink 7
For X=0 To 15
PX=40+(X*20)
Text PX,56,"."
Text PX,46,"."
Text PX,36,"."
Next
_PREFDAT:
Data 0,0,630,9,False,2,4,3,1,"MENU PREFERENCE'S EDITOR",%11
Data 2,15,626,62,False,5,7,6,1,"PALETTE",%10
Data 558,16,64,11,True,5,7,6,1,"",0
Data 560,17,60,9,False,2,4,3,1,"EXIT",%11
Data 7,28,5,5,True,5,5,5,1,"R",%10
Data 27,29,326,7,True,5,7,6,1,"",0
Data 30,30,320,5,True,0,7,6,1,"",0
Data 7,38,5,5,True,5,5,5,1,"G",%10
Data 27,39,326,7,True,5,7,6,1,"",0
Data 30,40,320,5,True,0,7,6,1,"",0
Data 7,48,5,5,True,5,5,5,1,"B",%10
Data 27,49,326,7,True,5,7,6,1,"",0
Data 30,50,320,5,True,0,7,6,1,"",0
Data 18,60,80,9,False,5,5,5,1,"COLOUR INDEX",%10
Data 128,59,24,11,True,5,7,6,1,"",0
Data 130,60,20,9,False,2,4,3,1,"<",%11
Data 160,60,40,9,True,0,7,6,1,"",%11
Data 208,59,24,11,True,5,7,6,1,"",0
Data 210,60,20,9,False,2,4,3,1,">",%11
Data 370,34,240,11,True,5,7,6,1,"",0
Data 372,35,60,9,False,2,4,3,1,"SYS DIR",%11
Data 438,35,166,9,True,0,7,6,1,"",%11
End Proc
Procedure _PREFCON
Screen 3
_BOX[160,60,40,9,True,0,7,6,1,Mid$(Str$(_INDEX),2),%11]
_BOX[438,35,166,9,True,0,7,6,1,_SYS$,%11]
Screen 1
_CL=Colour(_INDEX)
Screen 3
_RX=Int((_CL and $F00)/256)
_GX=Int((_CL and $F0)/16)
_BX=_CL mod 16
_PALETTE
_ORX=_RX : _OGX=_GX : _OBX=_BX
_PARRAY[5,0,0,0,0,0]
_PARRAY[1,1,130,60,20,9] : Rem Decrease INDEX
_PARRAY[1,2,210,60,20,9] : Rem Increase INDEX
_PARRAY[1,3,372,35,60,9] : Rem SYSTEM DIR
_PARRAY[1,4,560,17,60,9] : Rem EXIT
_PARRAY[0,5,0,0,0,0]
_PARRAY[0,6,0,0,0,0]
_PARRAY[0,7,0,0,0,0]
_PARRAY[0,8,0,0,0,0]
_PARRAY[0,9,0,0,0,0]
_PARRAY[0,10,0,0,0,0]
Screen Show 3
Repeat
_MMODE=Mouse Key
If _MMODE>0
MY=Y Screen(Y Mouse)
MX=X Screen(X Mouse)
If MY>0 and MY<9
_SCRNMOV[MY,3,78,290]
Else
_SCAN[MX,MY]
ZN=Param
If ZN>0
_INVERTSEL[ZN]
If ZN=1 or ZN=2
_NINDEX=_INDEX
If ZN=1
If _INDEX>0 : _NINDEX=_INDEX-1 : End If
Else
If _INDEX<7 : _NINDEX=_INDEX+1 : End If
End If
If _NINDEX<>_INDEX
_INDEX=_NINDEX
_BOX[160,60,40,9,True,0,7,6,1,Mid$(Str$(_INDEX),2),%11]
Screen 1
_CL=Colour(_INDEX)
Screen 3
_RX=Int((_CL and $F00)/256)
_GX=Int((_CL and $F0)/16)
_BX=_CL mod 16
_PALETTE
_ORX=_RX : _OGX=_GX : _OBX=_BX
End If
End If
If ZN=3
_ST$=MNU$(0,0) : MNU$(0,0)=_SYS$
_TEXENT[438,35,166,9,0,1,0,0,156,%11]
_SYS$=MNU$(0,0) : MNU$(0,0)=_ST$
End If
End If
If MX>30 and MX<350 and MY>30 and MY<55
If MY>30 and MY<35
_RX=Int((MX-30)/20)
If _RX<>_ORX
_BAR[_ORX,32,0]
_BAR[_RX,32,1]
_ORX=_RX
_MAKECOL
End If
End If
If MY>40 and MY<45
_GX=Int((MX-30)/20)
If _GX<>_OGX
_BAR[_OGX,42,0]
_BAR[_GX,42,1]
_OGX=_GX
_MAKECOL
End If
End If
If MY>50 and MY<55
_BX=Int((MX-30)/20)
If _BX<>_OBX
_BAR[_OBX,52,0]
_BAR[_BX,52,1]
_OBX=_BX
_MAKECOL
End If
End If
End If
End If
End If
Until ZN=4
Screen Hide 3
End Proc
Procedure _BAR[XP,YP,_COL]
Ink _COL
Bar(XP*20)+36,YP To(XP*20)+44,YP+1
End Proc
Procedure _PALETTE
_BAR[_ORX,32,0] : _BAR[_RX,32,1]
_BAR[_OGX,42,0] : _BAR[_GX,42,1]
_BAR[_OBX,52,0] : _BAR[_BX,52,1]
End Proc
Procedure _INVERTSEL[ZN]
_BOX[ARRS(ZN,1),ARRS(ZN,2),ARRS(ZN,3),ARRS(ZN,4),True,True,4,3,1,"",0]
Repeat
Until Mouse Key=0
_BOX[ARRS(ZN,1),ARRS(ZN,2),ARRS(ZN,3),ARRS(ZN,4),False,True,4,3,1,"",0]
End Proc
Procedure _MAKECOL
Screen 1
_CL=(_GX*$10)+(_RX*$100)+_BX
Colour _INDEX,_CL
Screen 3
End Proc
Procedure _SAVE
FIL$=Fsel$("","","Please Enter Filename To","Save Menu Data Under!!")
Screen 1
If FIL$<>""
_CRIPT$="ABCDEFGHIJLKLMNOPQRSTUVWXYXZ"
Open Out 1,FIL$
Print #1,"5.00"
Print #1,_SYS$
For CL=0 To 7
Print #1,Colour(CL)
Next
For I=0 To 4
_STR$=""
For N=0 To 90
_STR$=_STR$+Mid$(_CRIPT$,MNI(N,I)+2,1)
Next
Print #1,_STR$
Next
For I=0 To 2
For N=0 To 90
Print #1,MNU$(N,I)
Next
Next
Close 1
End If
End Proc
Procedure _LOAD[FIL$]
If Exist(FIL$)=True
_CRIPT$="ABCDEFGHIJLKLMNOPQRSTUVWXYXZ"
_FOUND=True
Open In 1,FIL$
Input #1,VS$
If VS$="5.00"
Input #1,_SYS$
For CL=0 To 7
Input #1,PAL(CL)
Next
For I=0 To 4
Input #1,_STR$
For N=0 To 90
CHAR$=Mid$(_STR$,N+1,1)
MNI(N,I)=Instr(_CRIPT$,CHAR$)-2
Next
Next
For I=0 To 2
For N=0 To 90
Line Input #1,MNU$(N,I)
Next
Next
Else
_FOUND=False
End If
Close 1
Else
_FOUND=False
End If
End Proc[_FOUND]
Procedure _SCRNMOV[MY,SCRN,HIGH,MXY]
Repeat
If Y Mouse<MXY
Screen Display SCRN,,Y Mouse-MY,,HIGH
Wait Vbl
End If
Until Mouse Key=0
End Proc